<?php

namespace Common\Tool;

use Qiniu\Config;
use Qiniu\Http\Error;
use Qiniu\Processing\PersistentFop;
use Qiniu\Storage\BucketManager;
use Qiniu\Storage\UploadManager;
use Qiniu\Auth;

class QiniuTool
{
    public $error = null;

    public function __construct($bucket = 'gongkai')
    {
        $this->accessKey = '_WMFIijHCej5UGHfbBCauINHk4qhnucN05G5cT5Q';
        $this->secretKey = "P_2KiRLBvN4JW80syQyto0eUWE28MrmACTiQYNkq";
        $this->bucket = $bucket;
        require_once './vendor/autoload.php';
    }

    /*返回auth*/
    protected function get_auth()
    {
        $auth = new Auth($this->accessKey, $this->secretKey);
        return $auth;
    }

    /*返回token */
    protected function get_token()
    {
        // 构建鉴权对象
        $auth = $this->get_auth();
        // 生成上传 Token
        return $auth->uploadToken($this->bucket);
    }

    /* @上传七牛云 */
    /* @param $save_name 保存在七牛云的名字
     * @param $k 本地文件的地址
     * @param return 失败返回false,  成功返回hash值
     * */
    public function upload($file_path,$key)
    {
        // 初始化 UploadManager 对象并进行文件的上传。
        $uploadMgr = new UploadManager();
        // 调用 UploadManager 的 putFile 方法进行文件的上传。
        list($ret, $err) = $uploadMgr->putFile($this->get_token(), $key, $file_path);
        if ($err !== null) { //出错
            $this->error = '上传出错!';
            return false;
        } else { //成功
            return $ret['hash'];
        }
    }

    /*获取私密空间文件地址*/
    /* @param $url 文件地址
     * @return $返回私密空间文件下载地址
     * */
    public function secret_load($url)
    {
        // 构建Auth对象
        $auth = $this->get_auth();
        // 对链接进行签名
        $signedUrl = $auth->privateDownloadUrl($url);
        return $signedUrl;
    }

    /*删除文件*/
    /*@param $file_name 需要删除的文件名 , 不包含空间名
     *@return 成功返回true ,失败返回false
     * */
    public function del($key)
    {
        $auth = $this->get_auth();
        $config = new \Qiniu\Config();
        $bucketManager = new \Qiniu\Storage\BucketManager($auth, $config);
        $err = $bucketManager->delete($this->bucket, $key);
        if ($err) { //失败
            return false;
        } else {//成功
            return true;
        }
    }

    /*空间中的文件列表
     *@param $prefix 文件前缀 默认:无
     *@param $limit 取多少数量,默认一百
     *@param $marker 上次返回的标记 默认:无. PS:是一个加密字符串,如果没取完就会有,取完了就没有
     *@param $delimiter='/'  边界符,我也不知道干啥的
     * */
    public function files_list($prefix = '', $limit = 100, $marker = '', $delimiter = '/')
    {
        $bucketManager = new BucketManager($this->get_auth());
// 列举文件
        list($ret, $err) = $bucketManager->listFiles($this->bucket, $prefix, $marker, $limit, $delimiter);
        if ($err !== null) { //失败
            return $err;
        } else { //失败
            return $ret;
//            if (array_key_exists('marker', $ret)) {
//                echo "Marker:" . $ret["marker"] . "\n";
//            }
//            echo "\nList Iterms====>\n";
        }
        //array(2) {
        //  ["marker"] => string(68) "eyJjIjowLCJrIjoiMTAxMjMxYTM5M2VlNzhiN2U5ODk1YjY5OTczNDEwNzQuanBnIn0="  //没取完才有,取完则没有
        //  ["items"] => array(1) {
        //    [0] => array(8) {
        //      ["key"] => string(36) "101231a393ee78b7e9895b6997341074.jpg"
        //      ["hash"] => string(28) "FmMd7y_9EXn3TvhkuSl4ElP3Jvc7"
        //      ["fsize"] => int(224347)
        //      ["mimeType"] => string(10) "image/jpeg"
        //      ["putTime"] => int(15591904643761628)
        //      ["type"] => int(0)
        //      ["status"] => int(0)
        //      ["md5"] => string(32) "b15e1aa18ea907e5d676f1948e3927af"
        //    }
        //  }
        //}
    }

    public function pro(){
        //对已经上传到七牛的视频发起异步转码操作
        $accessKey = $this->accessKey;
        $secretKey = $this->secretKey;
        $bucket = $this->bucket;
        $auth = new Auth($accessKey, $secretKey);
        //要转码的文件所在的空间和文件名。
        $key = '821c66996384286c4beba186713611ac.mp4';
        //转码是使用的队列名称。 https://portal.qiniu.com/mps/pipeline
        $pipeline = 'skdtest';
        $force = false;
        //转码完成后通知到你的业务服务器。
        $notifyUrl = 'http://375dec79.ngrok.com/notify.php';
        $config = new Config();
        //$config->useHTTPS=true;
        $pfop = new PersistentFop($auth, $config);
        //要进行转码的转码操作。 http://developer.qiniu.com/docs/v6/api/reference/fop/av/avthumb.html
        $fops = "avthumb/mp4/s/640x360/vb/1.4m|saveas/" . \Qiniu\base64_urlSafeEncode($bucket . ":qiniu_640x360.mp4"); //后面是保存文件名
        list($id, $err) = $pfop->execute($bucket, $key, $fops, $pipeline, $notifyUrl, $force);
        echo "\n====> pfop avthumb result: \n";
        if ($err != null) {
            var_dump($err);
        } else {
            echo "PersistentFop Id: $id\n";
        }
//查询转码的进度和状态
        list($ret, $err) = $pfop->status($id);
        echo "\n====> pfop avthumb status: \n";
        if ($err != null) {
            var_dump($err);
        } else {
            var_dump($ret);
        }
    }
}